home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Everything For A Hacker
/
19990506-[HACK].iso
/
HEXEDIT
/
UTILS
/
80X0393.ARJ
/
CHIRPER.ASM
< prev
next >
Wrap
Assembly Source File
|
1993-03-30
|
7KB
|
228 lines
;-----------------------------------------------------------------------
; Chirper.asm - A TSR that gives each key a musical tone for audio feedback.
; This program is useful for those with visual handicaps as well as those
; that are just learning to type. After learning what each character typed
; sounds like the user will be able to audibly detect if the wrong key has
; been pressed.
;
; Released to the public domain by Garry Freemyer on 02/04/93
; Send me a note if You like it. 5829 Sawmill Road.
; Paradise, CA. 95969
; (916) 877-7015
;-----------------------------------------------------------------------
cseg segment para public 'code'
assume cs:cseg
org 100h
start: jmp initialize
old9_hndlr label dword ;old int 9h handler
old9_off dw ?
old9_seg dw ?
notes dw 0
dw 18356
dw 17292
dw 16344
dw 15495
dw 14550
dw 13714
dw 12969
dw 12175
dw 11472
dw 10847
dw 10198
dw 9700
dw 9108
dw 8584
dw 8116
dw 7648
dw 7231
dw 6818
dw 6449
dw 6087
dw 5736
dw 5423
dw 5120
dw 4830
dw 4554
dw 4307
dw 4058
dw 3836
dw 3615
dw 3418
dw 3224
dw 3043
dw 2875
dw 2711
dw 2560
dw 2415
dw 2281
dw 2153
dw 2032
dw 1918
dw 1810
dw 1709
dw 1612
dw 1521
dw 1435
dw 1355
dw 1280
dw 1207
dw 1140
dw 1075
dw 1015
dw 959
dw 898
dw 1709
dw 854
dw 806
dw 760
dw 65535 ;Caps Lock,
dw 718
dw 677
dw 639
dw 604
dw 570
dw 538
dw 507
dw 479
dw 452
dw 427
dw 403
dw 380
dw 359
dw 338
dw 319
dw 301
dw 285
dw 268
dw 253
dw 239
dw 225
dw 213
dw 201
dw 189
dw 179
dw 169
dw 160
dw 151
dw 403
dw 380
ax_ dw ?
bx_ dw ?
scancode db ?
toggle db 1 ;turns program on or off. 1 = on.
load_msg db 0ah,0dh,"Chirper installed! Toggle: SysRq or Alt-SysRq for 101 Keyboard.",0ah,0dh
db "Toggle = SysRq.",10,13
db "By Garry Freemyer-916-877-7015 U.S. (Freeware)",0ah,0dh,"$"
;*************************************************************************
;New handler for int 9h (keyboard hardware interrupt)
;*************************************************************************
new9_hndlr proc
mov ax_,ax ;save ax register.
xor ax,ax ;zero ax register.
in al,60h ;get scancode.
mov scancode,al ;store scancode.
mov ax,ax_
pushf ;simulate int
call old9_hndlr
xor ax,ax
mov al,scancode ;ignore caps lock key.
cmp al,3ah
je exit_9
cmp al,54h
;has sys req been pressed?
jne continue
mov al,toggle
xor al,1 ;toggle toggle
mov toggle,al
cmp al,0
je nosound ;turn sound off too when turning program off.
continue:
mov al,toggle ;test status of toggle.
cmp al,0
je exit_9 ;if program off skip sound routines.
mov al,scancode ;get scancode.
cmp al,58h
ja nosound ;turn sound off when key is released.
mov bx_,bx ;save bx
xor bx,bx ;zero bx
add al,al
mov bx,notes
add ax,bx ;ax = vector address into notes array.
mov bx,ax
mov al,0b6h ;turn on sound
out 43h,al
mov ax,notes[bx];
out 42h,al
mov al ,ah
out 42h,al
in al,61h
or al,3
out 61h,al
mov bx,bx_
jmp exit_9
nosound: ;turn off sound, key is released.
in al,61h
and al,252
out 61h,al
exit_9:
mov ax,ax_
iret
new9_hndlr endp
last_byte db "$"
;------------------------------------------------------------------------
; Initialization procedure
;------------------------------------------------------------------------
initialize proc near
assume ds:cseg ;variables in this segment
;Insert new handlers into interrupt chain
;
mov ax,cs
mov ds,ax
mov ax,3509h ;get interrupt 9 vector
int 21h
mov old9_off,bx
mov old9_seg,es
mov ax,2509h
mov dx,offset new9_hndlr
int 21h
;Display message, then terminate but stay resident
;
mov dx,offset load_msg
mov ah,9
int 21h
;amount of memory to retain in dx
mov dx,(offset last_byte - offset cseg + 15)
mov cl,4
shr dx,cl ;convert to paragraphs
mov ax,3100h ;TSR function
int 21h
initialize endp
;
cseg ends
end start ;end of program